﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EquipSecs300;
using SecsEquip;
using SecsEquip300;

namespace EquipSecs300
{
    // 自定义处理PP的例子
    public class GEM_PPCostomizeHandleExample : SecsEquipEx
    {
        public GEM_PPCostomizeHandleExample(CSecsEquip300 m_pSecs, SecsEquipHelper secsEquipHelper )
        {
            this.m_pSecs = m_pSecs;
            this.SecsEquipHelper = secsEquipHelper;
            UpdateData();
        }

        // 开启自定义处理PP
        public void CostomizeHandlePP()
        {
            // 设置自定义处理PP事务
            // 正式使用的时候，需要把下面的内容放到初始化中，CommEnable之前
            // 2021.3.12 将委托改为事件了。

            m_pSecs.PPHandleMode(PP_HANDLE_MODE.eCostomizeHandle);
            m_pSecs.m_pPPCostomizeHandlerEvent += OnPPCostomizeHandler;
            m_pSecs.m_pPPNameListProc += OnPPNameListEvent;
        }

        // 处理
        public void OnPPCostomizeHandler(object sender, PPCostomizeHandleData e)
        {
            if (e.nEvent == PPCostomizeHandleEvent.PPEventLoadData)
            {
                // 上传recipe
                e.pPPData = OnSecsPPDataLoadProc(e.pPPID, ref e.nLength);
                e.nAck = 0;
            }
            else if (e.nEvent == PPCostomizeHandleEvent.PPEventDownData)
            {
                // 下载recipe
                e.nAck = OnSecsPPDataDownProc(e.pPPID, e.pPPData, e.nLength);
            }
            else if (e.nEvent == PPCostomizeHandleEvent.PPEventDelete)
            {
                // 删除recipe
            	e.nAck = DeleteRecipe(e.pPPID);
            }
            else if (e.nEvent == PPCostomizeHandleEvent.PPEventLoadInquire)
            {
                // 咨询是否允许下载recipe
            	e.nAck = LoadInquire(e.pPPID, e.nLength);
            }
        }

        // 获取名称列表
        public void OnPPNameListEvent(object sender, OnPPNameListEventArgs e)
        {
            // 用户自行遍历recipe到list中
            List<string> listName = new List<string>();
            listName.Add("123");
            listName.Add("1323x");

            e.listRecipe = listName;
        }



        // PP数据获取
        // 数据需要释放
        // 不会出现多线程同时调用该函数
        char[] OnSecsPPDataLoadProc(string ppid, ref int nLength)
        {
            nLength = 1024 * 1024 *1;
            char[] pPPData = new char[nLength];
            for (int i = 0; i < nLength; i++)
            {
                pPPData[i] = (char)(i & 0xFF);
            }
            return pPPData;
        }


        // PP数据更新
        PPHandleReply OnSecsPPDataDownProc(string ppid, char[] pData, int nLength)
        {
            if (nLength >= 1024 * 1024 * 2)
            {
                return PPHandleReply.PPLengthError;
            }

            for (int i = 0; i < nLength; i++)
            {
                if (pData[i] != (char)(i & 0xFF))
                {
                //    int a;
               //     a = 0;	//	打断点测试数据正确性
                }
            }
            return PPHandleReply.PPSuccess;
        }

        // 删除recipe
        PPHandleReply DeleteRecipe(string ppid)
        {
            return PPHandleReply.PPSuccess;
        }

        // PPSuccess为允许上传、下载
        // 非PPSuccess为不允许
        PPHandleReply LoadInquire(string ppid, int nSize)
        {
            return PPHandleReply.PPSuccess;
         //   return PPHandleReply.PPModeUnsupported;
        }
    }
}
